# -*- coding: utf-8 -*-
"""
@Time    : 2024/8/21 13:46 
@Author  : ZhangShenao 
@File    : 1.使用LangChain内置的工具.py
@Desc    : 使用LangChain内置的DuckDuckGo搜索工具

在LangChain中封装了大量的内置工具,开箱即用
涵盖了:搜索、图像生成、百科、视频信息提取、代码执行、数据分析等多个领域
LangChain内置的工具列表: https://python.langchain.com/v0.2/docs/integrations/tools/

在LangChain中,所有的工具都是BaseTool的子类,也都是Runnable可运行组件
可以直接通过invoke()方法执行

使用内置工具的步骤:
1. 按照对应的依赖库
2. 设置api_key等相关环境变量(可选)
3. 创建Tool实例,调用invoke()方法执行

"""

from langchain_community.tools import DuckDuckGoSearchResults
from langchain_core.utils.function_calling import convert_to_openai_tool

# 创建DuckDuckGoSearchResults工具类
# 可以自定义工具的相关属性
search_tool = DuckDuckGoSearchResults(
    name="DuckDuckGo搜索工具",
    description="用户隐私优先的通用搜索工具"
)

#

# 打印工具相关信息
print(f"工具名称: {search_tool.name}")
print(f"工具描述: {search_tool.description}")

# 调用工具
result = search_tool.invoke("特朗普有哪些政治主张？")
print(result)

# 通过LangChain内置的辅助函数convert_to_openai_tool()
# 可以将工具直接转换成OpenAI的tools参数形式
# 这样可以方便进行LLM的工具调用
tool_param = convert_to_openai_tool(search_tool)
print(tool_param)
